﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;
using FastTravel.BusinessLogic;
using ListItem = Ext.Net.ListItem;

namespace FastTravel.IntranetWeb
{
	/// <summary>
	/// Страница списка отелей
	/// </summary>
	public partial class HotelList : BasePage
	{
		/// <summary>
		/// Загрузка страницы
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		protected void Page_Load(object sender, EventArgs e)
		{
			var countryList = CountryManager.GetAll();
			foreach (var country in countryList)
			{
				comboFilterHotelCountry.Items.Add(new ListItem(country.Name, country.ID.ToString()));
			}
		}


		/// <summary>
		/// Поиск (добавление фильтров)
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e">Параметры запроса</param>
		protected void BtnSearchHotelClick(object sender, DirectEventArgs e)
		{
			grdHotel.Reload();
			toolbarBottomPaging.SetPageIndex(0);
		}

		/// <summary>
		/// Заполниение комбо-бокса списокм курортов в зависимости от выбранной страны
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		//protected void ResortRefresh(object sender, StoreRefreshDataEventArgs e)
		//{
		//    var data = new List<object>();
		//    var resortList = ResortManager.GetByCountry(int.Parse(this.comboFilterHotelResort.SelectedItem.Value));

		//    foreach (var resort in resortList)
		//    {
		//        data.Add(new { ID = resort.ID, Name = resort.Name });
		//    }

		//    this.ResortStore.DataSource = data;
		//    this.ResortStore.DataBind();
		//}

		/// <summary>
		/// События таблицы отелей
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e">Аргумент с командами</param>
		public void GridAction(object sender, DirectEventArgs e)
		{
			int id = int.Parse(e.ExtraParams["id"]);
			switch (e.ExtraParams["command"])
			{
				case "Edit":
					// ShowEditWindow(id);
					break;
				case "Delete":
					//if (CountryManager.HasResort(id))
					//{
					//    ExtNet.Msg.Notify("Ошибка", "Сначала удалите отели в этой стране!").Show();
					//}
					//else
					//{
						HotelManager.Delete(id);
						if (BusinessLogicManager.TryCommit())
						{
							ExtNet.Msg.Notify("Сообщение", "Отель удален!").Show();
							grdHotel.Reload();
						}
						else
						{
							ExtNet.Msg.Notify("Ошибка", "Невозможно удалить отель!").Show();
						}
					//}
					break;
			}
		}

		/// <summary>
		/// Получение списка отелей
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e">Параметры запроса</param>
		protected void StoreRefresh(object sender, StoreRefreshDataEventArgs e)
		{
			// todo: add filter by resort

			string filterByName = txtFilterHotelName.Text == "" ? string.Empty : txtFilterHotelName.Text;
			string filterByStarLevel = comboFilterHotelStarLevel.SelectedItem.Value == "" ? "-1" : comboFilterHotelStarLevel.SelectedItem.Value;
			string filterByCountry = comboFilterHotelCountry.SelectedItem.Value == "" ? "-1" : comboFilterHotelCountry.SelectedItem.Value;
			//string filterByResort = comboFilterHotelResort.SelectedItem.Value == "" ? "-1" : comboFilterHotelResort.SelectedItem.Value;
			string filterByResort = "-1";

			int totalCount = 0;
			var resortList = HotelManager.GetPageDTO(e.Start, e.Limit, e.Sort, e.Dir.ToString(), filterByName, int.Parse(filterByStarLevel), 
				int.Parse(filterByCountry), int.Parse(filterByResort), out totalCount);
			e.Total = totalCount;

			this.grdHotel.GetStore().DataSource = resortList;
		}
	}
}